In some applications, some instructions may be critical in terms of security, for example instructions relating to the verification of the PIN code of a smart card. When a fault injection attack is made, typically by using a laser beam, an attacker may attempt to modify a bit of an instruction in order, for example, to examine the behavior of the card and thereby obtain information on secret data.
Moreover, at the present time, executable instructions leading to opposite actions may have similar binary values. For example, if the hexadecimal data element 0x50 is the value of an instruction of the “jump if equal” type, the hexadecimal value 0x51 may be the value of the instruction “jump if not equal”.
Therefore the modification of the last bit of one of these two instructions, by a laser beam attack for example, may have serious consequences for the security of the processor, and thus for the application.
Moreover, at the present time, the distribution of the addresses (the addressing scheme) of the storage units and peripherals of a data processing system is often organized in blocks, grouped to a greater or lesser extent by type of storage and by property.
However, the different address ranges of the storage units and peripherals may be similar to each other, which may be harmful in terms of security. This is because, if a data loading instruction (“Load”), for example, contains the destination address of the data element in a certain storage unit, the modification of a particular bit in this address may have serious consequences and may cause the data element to be loaded into a different storage unit from the one originally specified.